home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / examples / programs / view_create.c < prev    next >
C/C++ Source or Header  |  1997-05-08  |  12KB  |  349 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)view_create.c    V1.22    3/13/95";
  3. #endif
  4. /*
  5. |    file name - view_create.c
  6. |
  7. |===================================================================
  8. |
  9. |    This program demonstrates the basics of creating the entire
  10. |    structure of a view entirely within a DV-Tools' program.
  11. |    Nothing is pre-created or pre-loaded from DV-Draw into this
  12. |    program.  Three basic types of objects are created:
  13. |
  14. |        (1) object with dynamic colors
  15. |        (2) subdrawing with subdrawing dynamics
  16. |        (3) a line graph
  17. |
  18. |    To run this program, type:
  19. |
  20. |        view_create
  21. |
  22. |    The resulting view is written to the file "created.view".  Use
  23. |    DV-Draw or DV-Play to display the newly created view.
  24. |
  25. |    In the case of the subdrawing dynamics, it should be noted that
  26. |    the threshold table CANNOT be edited, because the subdrawings'
  27. |    views were never saved to files.
  28. |
  29. |===================================================================
  30. */
  31. #include <windows.h>
  32.  
  33. #include "std.h"                /* include <stdio.h> plus some */
  34. #include "dvstd.h"              /* DV standard definitions (internals) */
  35. #include "dvtools.h"            /* DV-Tools definitions (visible) */
  36. #include "VOstd.h"              /* DV-Tools object definitions */
  37. #include "dvfuns.h"             /* DV-Tools function declarations */
  38. #include "Tfundecl.h"           /* DV-Tools T function declarations */
  39. #include "VOfundecl.h"          /* DV-Tools VO function declarations */
  40.  
  41. static char srcfile[]= "default.dat";
  42. static char viewfile[]= "created.view";
  43.  
  44. /* Functions defined in view_create.c */
  45. DSVAR SetDataSourceList V_P_((VIEW view));
  46. void MakeDynamicColorObject V_P_((OBJECT drawing, DSVAR dsv));
  47. void MakeDynamicSubdrawing V_P_((OBJECT drawing, DSVAR dsv));
  48. void CreateSubdrawings V_P_((OBJECT anchorpt, OBJECT *circsd_p, 
  49.   OBJECT *rectsd_p, OBJECT *linesd_p));
  50. void MakeGraph V_P_((OBJECT drawing, DSVAR dsv));
  51.  
  52. /* =========================================>>> MAIN PROGRAM ... */
  53.  
  54. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  55.                      LPSTR lpCmdLine,  int nCmdShow  )
  56. {
  57.   VIEW view;
  58.   DSVAR dsv;
  59.   OBJECT drawing;
  60.   int argc;
  61.   char **argv;
  62.   char mes_str[100];
  63.  
  64.   make_argv(&argc,&argv,GetCommandLine());
  65.   /* Initialize DVtools - use DVPATH config variable for path */
  66.   TInit ((char *) NULL, (char *) NULL);
  67.  
  68.   /* Create an empty view */
  69.   view = TviCreate ();
  70.  
  71.   /* Create data source list - get back one controlling data source var */
  72.   dsv = SetDataSourceList (view);
  73.  
  74.   /* Create empty drawing */
  75.   drawing = TviGetDrawing (view);
  76.  
  77.   /* Create an object with color dynamics */
  78.   MakeDynamicColorObject (drawing, dsv);
  79.  
  80.   /* Create a subdrawing with subdrawing dynamics */
  81.   MakeDynamicSubdrawing (drawing, dsv);
  82.  
  83.   /* Create a graph */
  84.   MakeGraph (drawing, dsv);
  85.  
  86.   /* Save the new view */
  87.   TviSave (view, viewfile);
  88.  
  89.   /* Exit DVtools */
  90.   TTerminate ();
  91.  
  92.   /* Print success message and exit */
  93.   sprintf( mes_str, "File 'created.view' created.\n" );
  94.   strcat( mes_str,"Use DV-Draw or DV-Play to display.\n" );
  95.   MessageBox (
  96.                GetFocus (),
  97.                mes_str,
  98.                "view_create:",
  99.                MB_OK
  100.              );
  101.  
  102.   return EXIT_OK;
  103. }
  104.  
  105.  
  106. /* =========================================>>> CREATES DATASOURCELIST ... */
  107. /* Set the data source list with a newly created data source */
  108.  
  109. DSVAR 
  110. SetDataSourceList (view)
  111.      VIEW view;
  112. {
  113.   DATASOURCE ds;
  114.   DATASOURCELIST ds_list;
  115.   DSVAR dsv;
  116.  
  117.   /* Create an empty data source list */
  118.   ds_list = TviGetDataSourceList (view);
  119.  
  120.   /* Create empty data source */
  121.   ds = TdsCreate ();
  122.  
  123.   /* Define data source's source */
  124.   TdsEditAttributes (ds, DSFILE, DSASCII, srcfile);
  125.  
  126.   /* Create data source variable and set its attributes */
  127.   dsv = TdsvCreate ();
  128.   TdsvEditAttributes (dsv, "Input_Var", V_F_TYPE, 1, 1, (int) NULL);
  129.  
  130.   /* Attach ds var to data source */
  131.   TdsAddDsVar (ds, dsv, (ADDRESS) NULL);
  132.  
  133.   /* Attach data source to ds list */
  134.   TdlAddDataSource (ds_list, ds, (DATASOURCE) NULL);
  135.  
  136.   /* Return back the one controlling data source variable */
  137.   return dsv;
  138. }
  139.  
  140.  
  141. /* ==============================>>> CREATES OBJECT WITH DYNAMIC COLOR... */
  142. /* Makes a graphical object with dynamic color control */
  143.  
  144. void 
  145. MakeDynamicColorObject (drawing, dsv)
  146.      OBJECT drawing;
  147.      DSVAR dsv;
  148. {
  149.   OBJECT circle, dyn_control, default_color, color_tt;
  150.   OBJECT center, radius, vd;
  151.  
  152.   /* Create an ordinary circle */
  153.   center = VOptCreate (WORLD_COORDINATES, -10000, 4000, (OBJECT) NULL);
  154.   radius = VOptCreate (WORLD_COORDINATES, -9000, 5000, (OBJECT) NULL);
  155.   circle = VOciCreate (center, radius, (ATTRIBUTES *) NULL);
  156.  
  157.   /* Attach circle to drawing */
  158.   VOdrObAdd (drawing, circle);
  159.  
  160.   /* Create vd object to control threshold table */
  161.   vd = VOvdCreate (dsv, NUMBER, (DATUM) 0.0);
  162.  
  163.   /* Set the vdp active range */
  164.   VPvd_drange (VOvdGetVdp (vd), 0.0, 1.0);
  165.  
  166.   /* Create a threshold table and default for color change */
  167.   default_color = VOcoCreate (COLOR_COMPONENTS, 255, 0, 122);
  168.   color_tt = VOttCreate (vd, OBJECT_DATUM (OT_COLOR), default_color);
  169.  
  170.   /* Add the thresholds to the table - values must be normalized */
  171.   VOttAddThresh (color_tt, 1 * 32767 / 5, VOcoCreate (COLOR_COMPONENTS, 255, 0, 0));
  172.   VOttAddThresh (color_tt, 2 * 32767 / 5, VOcoCreate (COLOR_COMPONENTS, 255, 255, 0));
  173.   VOttAddThresh (color_tt, 3 * 32767 / 5, VOcoCreate (COLOR_COMPONENTS, 255, 255, 255));
  174.   VOttAddThresh (color_tt, 4 * 32767 / 5, VOcoCreate (COLOR_COMPONENTS, 0, 255, 255));
  175.   VOttAddThresh (color_tt, 32767, VOcoCreate (COLOR_COMPONENTS, 0, 0, 255));
  176.  
  177.   /* Create a dynamic control object and set the erase method */
  178.   dyn_control = VOdyCreate ();
  179.   VOdySetEraseMethod (dyn_control, V_DYN_ERASE_BGCLR);
  180.  
  181.   /* Attach the threshold table to the dynamic control object */
  182.   VOdyAttachData (dyn_control, FOREGROUND_COLOR, color_tt, 
  183.                   (float *) NULL, (float *) NULL, (OBJECT) NULL, 
  184.                   (OBJECT) NULL);
  185.  
  186.   /* Attach the dynamic control object to the circle */
  187.   VOobDySet (circle, dyn_control);
  188. }
  189.  
  190.  
  191. /* ====================================>>> CREATES DYNAMIC SUBDRAWING ... */
  192. /* Make a subdrawing with special subdrawing dynamics */
  193.  
  194. void 
  195. MakeDynamicSubdrawing (drawing, dsv)
  196.      OBJECT drawing;
  197.      DSVAR dsv;
  198. {
  199.   OBJECT vd, anchorpt, subdraw_tt, dyn_control;
  200.   OBJECT topsd, rectsd, linesd, circsd;
  201.  
  202.   /* Create vd object to control threshold table */
  203.   vd = VOvdCreate (dsv, NUMBER, (DATUM) 0.0);
  204.  
  205.   /* Set the vdp active range */
  206.   VPvd_drange (VOvdGetVdp (vd), 0.0, 1.0);
  207.  
  208.   /* Create an anchor point for subdrawings */
  209.   anchorpt = VOptCreate (WORLD_COORDINATES, 10000, 4000, (OBJECT) NULL);
  210.  
  211.   /* Call function to create three different subdrawings */
  212.   CreateSubdrawings (anchorpt, &circsd, &rectsd, &linesd);
  213.  
  214.   /* Create a top-level subdrawing - a clone of one of the subdrawings */
  215.   topsd = VOobClone (circsd);
  216.  
  217.   /* Add the top-level subdrawing directly to the drawing */
  218.   VOdrObAdd (drawing, topsd);
  219.  
  220.   /* Create a threshold table for subdrawing change - use circle for default */
  221.   subdraw_tt = VOttCreate (vd, OBJECT_DATUM (OT_SUBDRAWING), circsd);
  222.  
  223.   /* Add the subdrawings to the table - threshold values must be normalized */
  224.   VOttAddThresh (subdraw_tt, 1 * 32767 / 3, rectsd);
  225.   VOttAddThresh (subdraw_tt, 2 * 32767 / 3, linesd);
  226.  
  227.   /* Create a dynamic control object and set the erase method */
  228.   dyn_control = VOdyCreate ();
  229.   VOdySetEraseMethod (dyn_control, V_DYN_ERASE_BGCLR);
  230.  
  231.   /* Attach the threshold table to the dynamic control object */
  232.   VOdyAttachData (dyn_control, V_DYN_SUBDRAWING, subdraw_tt, 
  233.                   (float *) NULL, (float *) NULL, (OBJECT) NULL,
  234.           (OBJECT) NULL);
  235.  
  236.   /* Attach the dynamic control object to the top-level subdrawing */
  237.   VOobDySet (topsd, dyn_control);
  238. }
  239.  
  240.  
  241. void 
  242. CreateSubdrawings (anchorpt, circsd_p, rectsd_p, linesd_p)
  243.      OBJECT anchorpt;
  244.      OBJECT *circsd_p;
  245.      OBJECT *rectsd_p;
  246.      OBJECT *linesd_p;
  247. {
  248.   VIEW sd_view1, sd_view2, sd_view3;
  249.   OBJECT sd_drawing, circle, rect, line;
  250.   OBJECT center, radius, point1, point2;
  251.  
  252.   /* Create a circle */
  253.   center = VOptCreate (WORLD_COORDINATES, 0, 0, (OBJECT) NULL);
  254.   radius = VOptCreate (WORLD_COORDINATES, 1000, 1000, (OBJECT) NULL);
  255.   circle = VOciCreate (center, radius, (ATTRIBUTES *) NULL);
  256.  
  257.   /* Create a circle subdrawing */
  258.   sd_view1 = TviCreate ();
  259.   sd_drawing = TviGetDrawing (sd_view1);
  260.   VOdrObAdd (sd_drawing, circle);
  261.   *circsd_p = VOsdCreate ((char *) NULL, sd_view1, anchorpt, 1.0,
  262.                           (ATTRIBUTES *) NULL);
  263.  
  264.   /* Create a rectangle */
  265.   point1 = VOptCreate (WORLD_COORDINATES, -1000, -1000, (OBJECT) NULL);
  266.   point2 = VOptCreate (WORLD_COORDINATES, 1000, 1000, (OBJECT) NULL);
  267.   rect = VOreCreate (point1, point2, (ATTRIBUTES *) NULL);
  268.  
  269.   /* Create a rectangle subdrawing */
  270.   sd_view2 = TviCreate ();
  271.   sd_drawing = TviGetDrawing (sd_view2);
  272.   VOdrObAdd (sd_drawing, rect);
  273.   *rectsd_p = VOsdCreate ((char *) NULL, sd_view2, anchorpt, 1.0,
  274.                           (ATTRIBUTES *) NULL);
  275.  
  276.   /* Create a line */
  277.   point1 = VOptCreate (WORLD_COORDINATES, -1000, -1000, (OBJECT) NULL);
  278.   point2 = VOptCreate (WORLD_COORDINATES, 1000, 1000, (OBJECT) NULL);
  279.   line = VOlnCreate (point1, point2, (ATTRIBUTES *) NULL);
  280.  
  281.   /* Create a line subdrawing */
  282.   sd_view3 = TviCreate ();
  283.   sd_drawing = TviGetDrawing (sd_view3);
  284.   VOdrObAdd (sd_drawing, line);
  285.   *linesd_p = VOsdCreate ((char *) NULL, sd_view3, anchorpt, 1.0,
  286.                           (ATTRIBUTES *) NULL);
  287. }
  288.  
  289.  
  290. /* =========================================>>> CREATES GRAPH ... */
  291. /* Create a line graph */
  292.  
  293. GLOBALREF DISPFORM VDline;
  294.  
  295. void 
  296. MakeGraph (drawing, dsv)
  297.      OBJECT drawing;
  298.      DSVAR dsv;
  299. {
  300.   OBJECT linegraph, ll, ur;
  301.   float start = 1.0, incr = 1.0;
  302.   DATAGROUP dgp;
  303.   VARDESC vdp;
  304.   float FloatVar = 0.0;
  305.  
  306.   /* Create the variable descriptor pointer with a base address
  307.      defined by FloatVar and the variable descriptor data type
  308.      is defined to be Float. */
  309.   vdp = VPvdcreate ((ADDRESS) & FloatVar, V_F_TYPE);
  310.  
  311.   /* Attach the vdp to the passed data source variable. This call
  312.      will change the access mode of the variable from direct to
  313.      data source bound.  The variable will now point to the data
  314.      source variable instead of the address location of FloatVar. */
  315.   TvdPutDataSourceVariable (vdp, dsv);
  316.  
  317.   /* Set the vdp active range */
  318.   VPvd_drange (vdp, 0.0, 1.0);
  319.  
  320.   /* Create linegraph object */
  321.   ll = VOptCreate (WORLD_COORDINATES, -10000, -10000, (OBJECT) NULL);
  322.   ur = VOptCreate (WORLD_COORDINATES, 2000, -1000, (OBJECT) NULL);
  323.   linegraph = VOdgCreate ((ADDRESS) NULL, ll, ur, (ATTRIBUTES *) NULL);
  324.  
  325.   /* Get data group structure */
  326.   dgp = (DATAGROUP) VOdgGetDgp (linegraph);
  327.  
  328.   /* Attach line graph data format, display and label tic marks */
  329.   VPdgdf (dgp, VDline);
  330.   VPdgcontext (dgp, (LONG) V_FT_TICS | V_FV_TICS | V_FT_LABEL_TICS | 
  331.                V_FV_LABEL_TICS, YES);
  332.  
  333.   /* Set range of time axis, set start time and increment, set scroll amount */
  334.   VPdgslots (dgp, 10);
  335.   VPdgtime_start_incr (dgp, &start, &incr);
  336.   VPdgscroll_amount (dgp, 0);
  337.  
  338.   /* Attach dgp to vdp, label time axis, vertical axis, and graph title  */
  339.   VPdgvdswitch (dgp, 1, vdp);
  340.   VPdgaxlabel (dgp, V_TIME_AXIS, "Time");
  341.   VPvdvallabel (vdp, "Value");
  342.   VPdgtitle (dgp, "Example of Graph Dynamics");
  343.  
  344.   /* Attach the graph to the drawing */
  345.   VOdrObAdd (drawing, linegraph);
  346. }
  347.  
  348. /* ---------------------------------------->>> END OF PROGRAM <<< */
  349.